package com.xbongbong.paas.service;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.BaseVO;
import com.xbongbong.pro.template.pojo.EnablePojo;
import com.xbongbong.pro.template.pojo.dto.CompanySaveDTO;
import com.xbongbong.pro.template.pojo.dto.ListTemplateSortDTO;
import com.xbongbong.pro.template.pojo.dto.TemplateChangeDTO;
import com.xbongbong.pro.template.pojo.dto.TemplateDTO;
import com.xbongbong.pro.template.pojo.dto.TemplatePermissionDTO;
import com.xbongbong.pro.template.pojo.dto.TemplatePermissionSetDTO;
import com.xbongbong.pro.template.pojo.vo.CompanyVO;
import com.xbongbong.pro.template.pojo.vo.EnableVO;
import com.xbongbong.pro.template.pojo.vo.TemplateGroupMenuVO;
import com.xbongbong.pro.template.pojo.vo.TemplateListVO;
import com.xbongbong.pro.template.pojo.vo.TemplateMenuVO;
import com.xbongbong.pro.template.pojo.vo.TemplatePermissionVO;

import java.util.List;

/**
 * @author haibin.zhang
 * @version v1.0
 * @date 2019/1/29 15:14
 * @since v1.0
 */
public interface TemplateService {
    /**
     * 表单设置 获取saas应用下的菜单列表
     * @param templateDTO 参数
     * @return 菜单列表
     * @throws XbbException XbbException
     * @author haibin.zhang
     */
    TemplateMenuVO getMenuList(TemplateDTO templateDTO) throws XbbException;

    /**
     * 表单设置 获取saas应用下的分组菜单列表
     * @param templateDTO 参数
     * @return 菜单列表
     * @throws XbbException XbbException
     * @author youli.chen
     */
    TemplateGroupMenuVO getMenuGroup(TemplateDTO templateDTO) throws XbbException;

    /**
     * 表单设置 saas菜单下的模板列表
     * @param templateDTO 参数
     * @return 模板列表
     * @throws XbbException XbbException
     * @author haibin.zhang
     */
    TemplateListVO getFormList(TemplateDTO templateDTO) throws XbbException;

    /**
     * 获取表单权限
     * @param templatePermissionDTO
     * @return
     * @throws XbbException XbbException
     * 创建时间 2019/6/7 2:34 PM
     * 修改时间 2019/6/7 2:34 PM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    TemplatePermissionVO getTemplatePermission(TemplatePermissionDTO templatePermissionDTO) throws XbbException;

    /**
     * 设置表单权限
     * @param templatePermissionSetDTO
     * @return
     * 创建时间 2019/6/7 2:34 PM
     * 修改时间 2019/6/7 2:34 PM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    BaseVO setTemplatePermission(TemplatePermissionSetDTO templatePermissionSetDTO) throws XbbException;

    /**
     * 切换表单
     * @param templateDTO 参数
     * @return 基础返回
     * @throws XbbException XbbException
     */
    BaseVO changeEnable(TemplateChangeDTO templateDTO) throws XbbException;

    /**
     * 获取具体业务下的公司配置
     * @param templateDTO 参数
     * @return 公司配置，可能为空
     * @throws XbbException XbbException
     */
    CompanyVO getCompanyConfig(TemplateDTO templateDTO) throws XbbException;

    /**
     * 保存公司配置
     * @param companySaveDTO 参数
     * @return 基础返回
     * @throws XbbException XbbException
     */
    BaseVO setCompanyConfig(CompanySaveDTO companySaveDTO) throws XbbException;

    /**
     * 具体业务下启用的表单，过滤权限
     * 用于多模板新建页、关联业务选择(fieldType=20001)
     * @param templateDTO 参数
     * @return 表单列表
     * @throws XbbException XbbException
     */
    EnableVO getEnableList(TemplateDTO templateDTO) throws XbbException;

    /**
     * 获取所有启用的模板，不过滤使用权限
     * @param templateDTO 参数
     * @return com.xbongbong.pro.template.pojo.vo.EnableVO
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    EnableVO getAllEnableList(TemplateDTO templateDTO) throws XbbException;

    /**
     * 具体业务下启用的表单
     * 用于列表页
     * @param templateDTO 参数
     * @return 表单列表
     * @throws XbbException XbbException
     */
    EnableVO templateList(TemplateDTO templateDTO) throws XbbException;

    List<EnablePojo> getSaasTemplateList(TemplateDTO templateDTO) throws XbbException;

    /**
     *修改表单的排序值
     * @param listTemplateSortDTO
     * @return
     * @throws XbbException
     */
    BaseVO updateTemplateSort(ListTemplateSortDTO listTemplateSortDTO) throws XbbException, IllegalAccessException, InstantiationException;


    /**
     * 根据templateId查询对应的表单(打印专用)
     * @param templateDTO
     * @return
     * @throws XbbException
     */
    EnableVO templateListPrint(TemplateDTO templateDTO) throws XbbException;

    BaseVO checkNum(TemplateDTO templateDTO) throws XbbException;
}
